#include<bits/stdc++.h>
using namespace std;
void solve(){
	int a,b;
	cin >> a >> b;
	string s;
	cin >> s;
	int n = s.size();
	for(int i = 0;i < n;i++){
		if(s[i]=='0')
			a--;
		if(s[i]=='1')
			b--;
	}
	for(int i = 0;i <= n/2;i++){
		//都不是问号的情况
		if(s[i] != '?' && s[n - i - 1] != '?'){
			if(s[i] != s[n - i - 1]){
				cout << -1 << "\n";
				return;
			}
		}else if(s[i] == '?' && s[i] == s[n - i - 1]){//都是问号
			continue;
		}else{//有一边是问号的情况
			if(s[i] != '?'){
				if(s[i] == '0') {
					a--;
					s[n - i - 1] = '0';
				}
				else {
					b--;
					s[n - i - 1] = '1';
				}
			}else{
				if(s[n - i - 1] == '0') {
					a--;
					s[i] = '0';
				}
				else {
					b--;
					s[i] = '1';
				}
			}
			if(a < 0 || b < 0){ 
				cout << -1 << "\n";
				return; 
			}
		}
	}

	//最后单独处理都是问号的情况
	for(int i = 0;i <= n/2;i++){
		if(s[i] == '?' && s[i] == s[n - i - 1] && i != n - i - 1){
			if(a >= 2){
				a -= 2;
				s[i] = s[n - i - 1] = '0';
			}else if(b >= 2){
				b -= 2;
				s[i] = s[n - i - 1] = '1';
			}
		}
		if(s[i] == '?'  && i == n - i - 1){
			if(a > 0){
				a -= 1;
				s[i] = '0';
			}else{
				b -= 1;
				s[i] = '1';
			}
		}
	}
	if(a != 0 || b != 0){
		cout << -1 << "\n";
		return; 
	}
	cout << s << "\n";
}
int main(){
	int t;
	cin >> t;
	while(t--) solve();
}